// 通过Vue.extend源码验证每次调用返回全新的VueComponent

    /**
     * Class inheritance
     */
     Vue.extend = function (extendOptions) {
        // extendOptions = extendOptions || {};
        // var Super = this;
        // var SuperId = Super.cid;
        // var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});
        // if (cachedCtors[SuperId]) {
        //   return cachedCtors[SuperId]
        // }
  
        // var name = extendOptions.name || Super.options.name;
        // if (name) {
        //   validateComponentName(name);
        // }
  
        // 每次调用VueComponent函数，都会返回创建新的函数内部变量Sub
        // 解读源码，可以用console.log()、debugger;
        var Sub = function VueComponent (options) {
          this._init(options);
        };
        // Sub.prototype = Object.create(Super.prototype);
        // Sub.prototype.constructor = Sub;
        // Sub.cid = cid++;
        // Sub.options = mergeOptions(
        //   Super.options,
        //   extendOptions
        // );
        // Sub['super'] = Super;
  
        // // For props and computed properties, we define the proxy getters on
        // // the Vue instances at extension time, on the extended prototype. This
        // // avoids Object.defineProperty calls for each instance created.
        // if (Sub.options.props) {
        //   initProps$1(Sub);
        // }
        // if (Sub.options.computed) {
        //   initComputed$1(Sub);
        // }
  
        // // allow further extension/mixin/plugin usage
        // Sub.extend = Super.extend;
        // Sub.mixin = Super.mixin;
        // Sub.use = Super.use;
  
        // // create asset registers, so extended classes
        // // can have their private assets too.
        // ASSET_TYPES.forEach(function (type) {
        //   Sub[type] = Super[type];
        // });
        // // enable recursive self-lookup
        // if (name) {
        //   Sub.options.components[name] = Sub;
        // }
  
        // // keep a reference to the super options at extension time.
        // // later at instantiation we can check if Super's options have
        // // been updated.
        // Sub.superOptions = Super.options;
        // Sub.extendOptions = extendOptions;
        // Sub.sealedOptions = extend({}, Sub.options);
  
        // // cache constructor
        // cachedCtors[SuperId] = Sub;
        return Sub
      };